import hashlib
import random
import string
import ast

from django.shortcuts import render


def generate_password(request):
    generated_password = None

    if request.method == 'POST':
        website_url = request.POST.get('website_url')
        user_expression = request.POST.get('user_expression')

        # 使用哈希函数确保相同的website_url生成相同的密码
        hashed_url = hashlib.sha256(website_url.encode()).hexdigest()

        # 解析和应用用户输入的数学表达式，传递 hashed_url 作为变量
        hashed_url = apply_user_expression(hashed_url, user_expression)

        # 设置随机种子，以确保相同的输入生成相同的密码
        random.seed(hashed_url)

        # 生成12位密码，包括数字、大小写英文、特殊符号
        a = string.ascii_uppercase
        b = string.ascii_lowercase
        c = string.digits
        d = string.punctuation
        generated_password = ''.join(random.choices(a, k=3))+''.join(random.choices(b, k=3))+''.join(random.choices(c, k=3))+''.join(random.choices(d, k=3))
        return render(request, 'index.html', {'generated_password': generated_password,
                                                  'website_url': website_url,
                                                  'user_expression': user_expression})
    return render(request, 'index.html', {'generated_password': generated_password})


def apply_user_expression(hashed_url, user_expression):
    try:
        v = int(hashed_url, 16)
        # 将 hashed_url 放入表达式的环境中
        expr_env = {'x': v}
        # 安全地解析用户输入的表达式，传递环境
        expr_ast = ast.parse(user_expression, mode='eval')
        expr_value = eval(compile(expr_ast, filename='', mode='eval', dont_inherit=True), expr_env)
        # 将解析后的表达式作为新的 hashed_url
        new_v = hashlib.sha256(str(expr_value).encode()).hexdigest()
        return new_v
    except (SyntaxError, TypeError, ValueError):
        # 如果解析失败，返回原始 hashed_url
        return hashed_url

def test(request):

    return render(request, 'index2.html')